#include <future>
#include <thread>
#include <iostream>

int main(void)
{
    {
        std::promise<int> ptr; //用来包装一个值，将数据和future绑定起来，方便线程赋值
        std::thread t([](std::promise<int> &p){
                p.set_value_at_thread_exit(9); //设置线程的返回值
                }, std::ref(ptr)); 
        t.join();
        std::future<int> f = ptr.get_future(); //获取线程的返回值
        auto r = f.get();

        std::cout << r << std::endl;
    }

    {
        std::packaged_task<int()> task([](){ return 7; });
        std::thread t1 (std::ref(task));

        t1.join();
        std::future<int> f1 = task.get_future();
        auto r1 = f1.get();
        std::cout << r1 << std::endl;

    }
    return 0;
}
